package priv.pront.code.robot.roboCom_na_2022;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;


/**
 * @Description: 错误两个点
 * @Author: pront
 * @Time:2023-06-24 18:44
 */
public class RC_v3_智能护理中心统计 {
    static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

//    每个老人对应那个管理节点
    static Map<Integer, String> noManagerMap = new HashMap<>();

//    管理节点下有多少个老人
    static Map<String, List<Integer>> managerNoMap = new HashMap<>();

//    管理节点直接对应的子管理节点
    static Map<String, List<String>> sunMap = new HashMap<>();

    static List<Integer> ansList = new ArrayList<>();

//   判断数字正则表达式
    static Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
    static int n, m;

    public static void main(String[] args) throws IOException {
        String[] fLine = bf.readLine().split(" ");
        n = Integer.parseInt(fLine[0]);
        m = Integer.parseInt(fLine[1]);
        for (int i = 0; i < m; i++) {
            String[] sLine = bf.readLine().split(" ");
            String first = sLine[0];
            String second = sLine[1];
            if (isInteger(first)) {
                add(first, second);
            } else {
                addSunMap(first, second);
            }
        }

        while (true) {
            String[] sLine = bf.readLine().split(" ");
            String f = sLine[0];
            if (f.equals("E")) break;
            if (f.equals("Q")) {
                String s = sLine[1];
                int ans = find(s);
                ansList.add(ans);
            } else if (f.equals("T")) {
                int no = Integer.parseInt(sLine[1]);
                String t = sLine[2];
                String target = noManagerMap.get(no);
                List<Integer> list2 = managerNoMap.get(t);
                if (target == null) {
                    list2.add(no);
                    managerNoMap.put(t, list2);
                } else {
                    List<Integer> list = managerNoMap.get(target);
                    list.remove(new Integer(no));
                    managerNoMap.put(target, list);
                    list2.add(no);
                    managerNoMap.put(t, list2);
                }
            }
        }
        for (int i = 0; i < ansList.size(); i++) {
            out.print(ansList.get(i));
            if (i != ansList.size() - 1) {
                out.println();
            }
            out.flush();
        }

    }

//     管理节点直接对应的子管理节点 添加数据
    private static void addSunMap(String first, String second) {
        if (managerNoMap.get(second) == null) {
            managerNoMap.put(second, new ArrayList<>());
        }
        if (managerNoMap.get(first) == null) {
            managerNoMap.put(first, new ArrayList<>());
        }
        List<String> list;
        if (!sunMap.containsKey(second)) {
            list = new ArrayList<>();
        } else {
            list = sunMap.get(second);
        }
        list.add(first);
        sunMap.put(second, list);
    }

//    添加管理节点下的老人
    private static void add(String first, String second) {
        int no = Integer.parseInt(first);
        noManagerMap.put(no, second);
        List<Integer> list;
        if (!managerNoMap.containsKey(second)) {
            list = new ArrayList<>();
        } else {
            list = managerNoMap.get(second);
        }
        list.add(no);
        managerNoMap.put(second, list);

    }

//    是否为数字
    private static boolean isInteger(String str) {
        return pattern.matcher(str).matches();
    }

//    递归查询该管理节点的所有老人
    private static int find(String s) {
        if (sunMap.get(s) == null && managerNoMap.get(s).size() == 0) {
            return 0;
        }
        int ans = 0;
        List<String> list = sunMap.get(s);
        ans += managerNoMap.get(s).size();
        if (list != null) {
            for (String s1 : list) {
                ans += find(s1);
            }
        }
        return ans;
    }
}
